// dxd.cpp : Defines the initialization routines for the DLL.
//

#include "stdafx.h"
#include "dxd.h"
#include "HookDx.h"
#include "ShThread.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#endif

//
//TODO: If this DLL is dynamically linked against the MFC DLLs,
//		any functions exported from this DLL which call into
//		MFC must have the AFX_MANAGE_STATE macro added at the
//		very beginning of the function.
//
//		For example:
//
//		extern "C" BOOL PASCAL EXPORT ExportedFunction()
//		{
//			AFX_MANAGE_STATE(AfxGetStaticModuleState());
//			// normal function body here
//		}
//
//		It is very important that this macro appear in each
//		function, prior to any calls into MFC.  This means that
//		it must appear as the first statement within the 
//		function, even before any object variable declarations
//		as their constructors may generate calls into the MFC
//		DLL.
//
//		Please see MFC Technical Notes 33 and 58 for additional
//		details.
//

// CdxdApp

BEGIN_MESSAGE_MAP(CdxdApp, CWinApp)
END_MESSAGE_MAP()


// CdxdApp construction

CdxdApp::CdxdApp()
{
	// TODO: add construction code here,
	// Place all significant initialization in InitInstance
}


// The one and only CdxdApp object

CdxdApp theApp;


// CdxdApp initialization
DWORD WINAPI HookDx(LPVOID lpThreadParameter)
{
	Sleep(5000);
	AFX_MANAGE_STATE(AfxGetStaticModuleState());
	CWinThread* m_pThrd = AfxBeginThread(RUNTIME_CLASS(CShThread),0,0);
	return 0;
}

BOOL CdxdApp::InitInstance()
{
	CWinApp::InitInstance();

	if (!AfxSocketInit())
	{
		AfxMessageBox(IDP_SOCKETS_INIT_FAILED);
		return FALSE;
	}
	
	Test();

	::CreateThread(NULL,0,HookDx,NULL,NULL,NULL);

	return TRUE;
}
